// Copyright 2009 Pigasus.
// GNU GPL v2.
// Author: John Zhang and Jordan Rupprecht.

#include "cast.h"

#include <math.h>

#include <iostream>
#include <sstream>
#include <string>

#include "pigasus-types.h"

using namespace std;

int CastToInt(const int &v) {
  return v;
}

int CastToInt(const double &v) {
  return round(v);
}

int CastToInt(const string &v) {
  int buffer;
  sscanf(v.c_str(), "%d", &buffer);
  return buffer;
}

double CastToFloat(const int &v) {
  return (double)v;
}

double CastToFloat(const double &v) {
  return v;
}

double CastToFloat(const string &v) {
  double buffer;
  sscanf(v.c_str(), "%lf", &buffer);
  return buffer;
}

string CastToString(const int &v) {
  stringstream out;
  out << v;
  return out.str();
}

string CastToString(const double &v) {
  stringstream out;
  out << v;
  return out.str();
}

string CastToString(const string &v) {
  stringstream out;
  out << v;
  return out.str();
}

File CastToFile(const string &v) {
  return File(v);
}

int CastToInt(void *v) {
  return *((int*)v);
}

double CastToFloat(void *v) {
  return *((double*)v);
}

string CastToString(void *v) {
  return *((string*)v);
}

List CastToList(void *v) {
  return ((List*)v)->CloneValue();
}

Map CastToMap(void *v) {
  return ((Map*)v)->CloneValue();
}

File CastToFile(void *v) {
  return ((File*)v)->CloneValue();
}

List CastToList(const List &v) {
  return v;
}

Map CastToMap(const Map &v) {
  return v;
}

File CastToFile(const File &v) {
  return v;
}

